#include "mySort.h"
#include <iostream>
#include <string>
using namespace std;

// 构造函数：初始化 num 和 origin
MySort::MySort() : num(0), origin(nullptr) {}

// 带参数构造函数
MySort::MySort(int n, int* arr) : num(n), origin(arr) {}

// 析构函数
MySort::~MySort() {}

// 交换两个数的值
void MySort::changeSwap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

// 输出当前数组的字符串
string MySort::printNum() {
    string result = "";
    for (int i = 0; i < num; ++i) {
        result += to_string(origin[i]) + " ";
    }
    result += "\n";
    return result;
}

// 奇偶交换排序
string MySort::paritySort() {
    string result = "";
    bool swapped;
    do {
        swapped = false;
        // 奇数索引交换
        for (int i = 1; i < num - 1; i += 2) {
            if (origin[i] > origin[i + 1]) {
                changeSwap(origin[i], origin[i + 1]);
                swapped = true;
                result += printNum();  // 每次交换后输出数组
            }
        }
        // 偶数索引交换
        for (int i = 0; i < num - 1; i += 2) {
            if (origin[i] > origin[i + 1]) {
                changeSwap(origin[i], origin[i + 1]);
                swapped = true;
                result += printNum();  // 每次交换后输出数组
            }
        }
    } while (swapped);  // 如果有交换，则继续循环
    return result;
}

// 双向冒泡排序
string MySort::bubbleSort() {
    string result = "";
    for (int i = 0; i < num - 1; i++) {
        // 正向冒泡
        for (int j = 0; j < num - i - 1; j++) {
            if (origin[j] > origin[j + 1]) {
                changeSwap(origin[j], origin[j + 1]);
                result += printNum();  // 每次交换后输出数组
            }
        }
        // 反向冒泡
        for (int j = num - i - 1; j > 0; j--) {
            if (origin[j] < origin[j - 1]) {
                changeSwap(origin[j], origin[j - 1]);
                result += printNum();  // 每次交换后输出数组
            }
        }
    }
    return result;
}
